package example.day02;

/**
 * @author 涛哥
 * @nick_name "deep as the sea"
 * @contact qq:657270652 wx:doit_edu
 * @site www.doitedu.cn
 * @date 2021-03-02
 * @desc 逻辑运算符示例代码
 */
public class _04_逻辑运算符Demo {
    public static void main(String[] args) {
        int x = 10;
        int y = 10;
        int z = 20;

        boolean b1 = x>y;  // false
        boolean b2 = x<z;  // true

        // true & true =>  true
        // true & false => false
        // false & true => false
        // false & false => false
        // true & false & true => false
        // true &  true & true & false & true =>
        boolean b3 = b1 & b2;  // false
        boolean b4 = (x>=y) & (y<=z);  // true


        // 下面的句子看得懂吗？
        boolean b5 = x==10 & true;

        // 或运算
        // true和任何布尔值求或，结果就是true
        System.out.println(b1 | b2);  // true
        boolean c1 = true;
        boolean c2 = false;
        System.out.println(c1 | c2); // true
        System.out.println(!c1 | c2); // false

        // 异或
        // 两边不一样则为true，否则为false
        System.out.println(c1 ^ c2);  // true


        // 短路与
        // &  和  &&  的运算逻辑是一样的
        System.out.println(c1 && c2 ); //  false
        System.out.println(c1 & c2 ); //  false


        // & 和 && 区别，参悟下面的例子
        int i = 5;
        System.out.println(false & (i++ > 4));  // false
        System.out.println(i);   // 6

        // 短路与的特点是：
        // 从左到右运算，只要碰到一个false，它就知道最终结果一定是false，后面那些表达式就不需要去计算了
        int j = 5;
        System.out.println(false && (j++ > 4));  // false
        System.out.println(j);  // 5


        // 短路 或  ||
        // 跟普通 或的区别：  只要碰到一个true，结果一定是true，后面的表达式就不执行了
        System.out.println( true || (j++ > 4));  // j++ >4 表达式压根不执行


    }
}
